#coding:utf-8
"""关于区域位置的视图"""

from ihome.api_1_0 import api
from flask import request, jsonify, current_app, session
from ihome.utils.response_code import RET
import re
from ihome.models import Area
from werkzeug.security import check_password_hash
from ihome.utils.login_wrapper import login_wrapper
from ihome import redis_store
from ihome import constants
import json

@api.route('/areas',methods=['GET'])
def areas():
    """
    获取areas视图
    返回json数据

    细节处理:
            城区信息是常用信息,所以设置缓存
            我们尽量存储在redis中,而不是直接从mysql中提取
    """

    # 细节处理中,判断redis是否存在,如果存在,则读取后直接返回,不存在,则从mysql读取

    try:
        resp_json_str = redis_store.get('areas_info')
    except Exception as e:
        current_app.logger.error(e)
    else:
        if resp_json_str:
            # 如果存在
            current_app.logger.info('redis数据返回城区信息------------------------')
            return resp_json_str

    # 不存在,就从数据库查询
    try:
        area_list = Area.query.all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='数据库读取失败')

    # 构建返回列表
    resp_list = []
    for area in area_list:
        # dict1 = {area.id:area.name} # 这种方式后端提取不出来呀,哭
        # dict1 = {'aid':area.id,'aname':area.name}  # 这种方法可以分配给model来实现
        dict1 = area.to_dict()

        resp_list.append(dict1)

    # 将信息存储在redis中
    # 考虑每次返回的其实质都是一样的,所以就直接将最后的json数据都保存成字符串
    resp_dict = dict(errno=RET.OK, errmsg='获取成功',data=resp_list)
    resp_json_str = json.dumps(resp_dict)

    try:
        redis_store.set('areas_info',resp_json_str,ex=constants.AREAS_REDIS_CACHE)
    except Exception as e:
        current_app.logger.error(e)
    current_app.logger.info('mysql数据返回城区信息------------------------')

    # 必须这样定义,才能返回json数据
    return resp_json_str, 200, {"Content-Type": "application/json"}

    # return jsonify(errno=RET.OK, errmsg='获取成功',data=resp_list)

